from django.db import models
from django.utils import timezone
from ckeditor.fields import RichTextField
from ckeditor_uploader.fields import RichTextUploadingField
# Create your models here.


# 以上的类名代表了数据库表名，且继承了models.Model，类里面的字段代表数据表中的字段(name)，数据类型则由CharField（相当于varchar）、DateField（相当于datetime）， max_length 参数限定长度。
class Test(models.Model):
    name = models.CharField(max_length=20,verbose_name='名字') # verbose_name修改后台管理系统的字段显示名
    pub_date = models.DateField(default='2021-12-24')
    age = models.IntegerField(verbose_name='年龄',default=10,help_text='提示信息')
    phone = models.CharField(max_length=11,null=True) # 数据库可以为null,后台管理系统提示为必填项目
    birth = models.DateTimeField(auto_now=True)
    tele = models.CharField(max_length=11,blank=True,null=True) # 数据库可以为null,blank=True设置后台管理系统这个字段可以不填（字段显示颜色变浅），但数据保存后数据库中字段值为空的字符串
    password = models.CharField(max_length = 11,default='123456',editable=False) # editable默认为True,改成False后，后台管理系统直接不显示此字段
    sex = models.BooleanField('性别',choices=((0,'女'),(1,'男')),null=True) # 设置后台管理系统可修改字段值选项,写入数据库的值为 0 和 1

    class Meta:
        verbose_name_plural = 'Test01'  # 修改显示表名
        # verbose_name = 'Test01' # 复数形式显示


    #重定义系统的str方法，让它返回对应name字段内容
    def __str__(self) -> str:
        return self.name

#学生类
class  Student(models.Model):
    id = models.AutoField(primary_key=True)
    sname = models.CharField(max_length=20)
 
    # 一对多外键设置，'多'的模型类设置外键，注意需要带参数on_delete
    cid = models.ForeignKey('Class',on_delete=models.CASCADE)
    # cid = models.ForeignKey(to='Class',to_field='id',related_name='student',on_delete=models.CASCADE)
    # 指定当前关系与被关联对象中的哪个字段关联。默认情况下，to_field 指向被关联对象的主键。
 
    # 一对一外键设置，哪个模型设置外键都可以，注意需要带参数on_delete
    detail = models.OneToOneField('StudentDetail',on_delete=models.CASCADE)

#学生信息类
class StudentDetail(models.Model):
    id = models.AutoField(primary_key=True)
    height = models.IntegerField()
    email = models.EmailField()
    memo = models.TextField(max_length=100)
 
#班级类
class Class(models.Model):
    id = models.AutoField(primary_key=True)
    cname = models.CharField(max_length=20)
    cdata = models.DateField()
 
#老师类
class Teacher(models.Model):
    id = models.AutoField(primary_key=True)
    tname = models.CharField(max_length=20)
 
    #多对多外键设置，哪个模型类创建外键都可以，注意没有on_delete参数
    cid = models.ManyToManyField(Class)
#注意：设置外键的方法中，第一个参数为外键对应的类名，一般加上引号。如果不加引号，那该类必须创建在主表前面

class Book(models.Model):
    name = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=6,decimal_places=1)

# 上传文件记录
class FileModel(models.Model):
    name = models.CharField(max_length=50)
    path = models.CharField(max_length=100)
    update_time = models.DateTimeField(default=timezone.now())

# ckeditor富文本编辑器
class Article(models.Model):
    title = models.CharField(max_length=50,verbose_name="标题")
    # content = models.CharField(max_length=100)
    # content = RichTextField(blank=True,null=True,verbose_name="内容")
    content = RichTextUploadingField()